library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(stringr)
## Warning: package 'stringr' was built under R version 3.5.1
library(plotly)
## Warning: package 'plotly' was built under R version 3.5.1
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 3.5.1
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
library(RgoogleMaps)
## Warning: package 'RgoogleMaps' was built under R version 3.5.1
library(ggmap)
## Warning: package 'ggmap' was built under R version 3.5.1
##
## Attaching package: 'ggmap'
## The following object is masked from 'package:plotly':
##
## wind
github <- "https://raw.githubusercontent.com/ucb-stat133/stat133-fall-2018/master/"
datafile <- "data/mobile-food-sf.csv"
download.file(paste0(github, datafile), destfile = "mobile-food-sf.csv")
dat <- read.csv('mobile-food-sf.csv', stringsAsFactors = FALSE)
Changing Times
time1 <- '10AM'
str_sub(time1, start = 1, end = 2)
## [1] "10"
str_sub(time1, start = 3, end = 4)
## [1] "AM"
times <- c('12PM', '10AM', '9AM', '8AM', '2PM')
str_sub(times, start = 1, end = nchar(times)-2)
## [1] "12" "10" "9" "8" "2"
str_sub(times, start = nchar(times)-1, end = nchar(times))
## [1] "PM" "AM" "AM" "AM" "PM"
str_sub(times, start = -2)
## [1] "PM" "AM" "AM" "AM" "PM"
str_replace(times, pattern = 'AM|PM', replacement = '')
## [1] "12" "10" "9" "8" "2"
hours <- as.numeric(str_replace(times, pattern = 'AM|PM', replacement = ''))
hours
## [1] 12 10 9 8 2
periods <- str_sub(times, start = -2)
periods
## [1] "PM" "AM" "AM" "AM" "PM"
period_freq <- table(periods)
plot_ly(x = names(period_freq),
y = period_freq,
type = 'bar')
position <- (periods == 'PM') & (hours < 12)
for (i in 1:length(position)) {
if (position[i]) {
hours[i] <- hours[i] + 12
}
else {
hours[i] <- hours[i]
}
}
hours
## [1] 12 10 9 8 14
am <- (periods == 'AM') & (hours == 12)
for (i in 1:length(am)) {
if (am[i]) {
hours[i] <- 0
}
else {
hours[i] <- hours[i]
}
}
start24 <- hours
start24
## [1] 12 10 9 8 14
scale24 function that change to 24hr scale
scale24 <- function(x) {
hour <- as.numeric(str_replace(x, pattern = 'AM|PM', replacement = ''))
period <- str_sub(x, start = -2)
p <- (period == 'PM') & (hour < 12)
for (i in 1:length(p)) {
if (p[i]) {
hour[i] <- hour[i] + 12
}
else {
hour[i] <- hour[i]
}
}
a <- (period == 'AM') & (hour == 12)
for (i in 1:length(a)) {
if (a[i]) {
hour[i] <- 0
}
else {
hour[i] <- hour[i]
}
}
hour
}
dat$start <- scale24(dat$starttime)
dat$end <- scale24(dat$endtime)
dat$duration <- dat$end - dat$start
Latitude and Longitude Coordinates
lat_lon <- str_replace_all(dat$Location, pattern = '\\(|\\)', replacement = '')
lat_lon <- str_split(lat_lon, pattern = ',')
lat <- as.numeric(unlist(lapply(lat_lon, function(x) x[1])))
head(lat)
## [1] 37.76520 37.79079 37.71120 37.77730 NA 37.72704
lon <- as.numeric(unlist(lapply(lat_lon, function(x) x[2])))
head(lon)
## [1] -122.4165 -122.4023 -122.3947 -122.3948 NA -122.4001
dat$lat <- lat
dat$lon <- lon
head(dat)
## DayOfWeekStr starttime endtime PermitLocation
## 1 Friday 10AM 10PM 200 SHOTWELL ST
## 2 Friday 1PM 2PM 180 MONTGOMERY ST
## 3 Friday 10AM 11AM 101 EXECUTIVE PARK BLVD
## 4 Friday 10AM 3PM 290 TOWNSEND ST
## 5 Friday 10AM 11AM 299 ILLINOIS ST
## 6 Friday 10AM 11AM 1828 EGBERT AVE
## optionaltext
## 1 Tacos, Burritos, Tortas, Quesadillas, Mexican Drinks, Aguas Frescas
## 2 Cold Truck: sandwiches, drinks, snacks, candy, hot coffee
## 3 Cold Truck: Pre-packaged Sandwiches, Various Beverages, Salads, Snacks
## 4 Hot Dogs, Hamburgers, Nachos, Steaks, Pastas, Asian Dishes, Tri-Tip Sandwiches, Sodas & Water
## 5 Cold Truck: Sandwiches, fruit, snacks, candy, hot and cold drinks
## 6 Cold Truck: Cheeseburgers, Burgers, Chicken Bake, Chili Dogs, Hot Dogs, Corn Dogs, Cup of Noodles, Egg Muffins, Tamales, Hot Sandwiches Quesadillas, Gatorade, Juice, Soda, Mikl, Coffee, Hot Cocoa, Hot Tea, Flan, Fruits, Fruit Salad, Yogurt, Candy, Chips, Donuts, Cookies, Granola, Muffins & Various Drinks & Pre-Packaged Snacks.
## ColdTruck Applicant Location start
## 1 N Santana ESG, Inc. (37.7651967350509,-122.416451692902) 10
## 2 Y Sun Rise Catering (37.7907890558203,-122.402273431333) 13
## 3 Y Golden Catering (37.7111991003088,-122.394693339395) 10
## 4 N Linda's Catering (37.7773000262759,-122.394812784799) 10
## 5 Y May Catering <NA> 10
## 6 Y Bach Catering (37.7270392647114,-122.400141029645) 10
## end duration lat lon
## 1 22 12 37.76520 -122.4165
## 2 14 1 37.79079 -122.4023
## 3 11 1 37.71120 -122.3947
## 4 15 5 37.77730 -122.3948
## 5 11 1 NA NA
## 6 11 1 37.72704 -122.4001
Plotting locations on a map
center <- c(mean(dat$lat, na.rm = TRUE), mean(dat$lon, na.rm = TRUE))
zoom <- min(MaxZoom(range(dat$lat, na.rm = TRUE),
range(dat$lon, na.rm = TRUE)))
map1 <- GetMap(center=center, zoom=zoom, destfile = "san-francisco.png")
PlotOnStaticMap(map1, dat$lat, dat$lon, col = "#ed4964", pch=20)

Types of food
foods <- dat$optionaltext
b <- c("Burritos","burritos")
dat$has_b <- str_detect(foods, pattern = paste(b, collapse = '|'))
t <- c("Tacos","tacos")
dat$has_t <- str_detect(foods, pattern = paste(t, collapse = '|'))
q <- c("Quesadillas","quesadillas")
dat$has_q <- str_detect(foods, pattern = paste(q, collapse = '|'))
burritos <- data.frame(filter(dat, dat$has_b))
head(burritos)
## DayOfWeekStr starttime endtime PermitLocation
## 1 Friday 10AM 10PM 200 SHOTWELL ST
## 2 Friday 1PM 2PM 3335 17TH ST
## 3 Friday 10AM 11AM 2045 EVANS AVE
## 4 Friday 12PM 1PM 1801 EVANS AVE
## 5 Friday 9AM 11AM 1650 03RD ST
## 6 Friday 11AM 2PM 225 BUSH ST
## optionaltext
## 1 Tacos, Burritos, Tortas, Quesadillas, Mexican Drinks, Aguas Frescas
## 2 Burgers, melts, hot dogs, burritos,sandwiches, fries, onion rings, drinks
## 3 Burgers, melts, hot dogs, burritos,sandwiches, fries, onion rings, drinks
## 4 Burgers, melts, hot dogs, burritos,sandwiches, fries, onion rings, drinks
## 5 Burgers, melts, hot dogs, burritos,sandwiches, fries, onion rings, drinks
## 6 Chicken Tiki Masala Burritos, Paneer Tiki Masala Burritos, Samosas, Mango Lassi
## ColdTruck Applicant Location start
## 1 N Santana ESG, Inc. (37.7651967350509,-122.416451692902) 10
## 2 Y Natan's Catering (37.7633319911646,-122.420235403432) 13
## 3 Y Natan's Catering (37.7477067391559,-122.396413656839) 10
## 4 Y Natan's Catering (37.745078648302,-122.392261844141) 12
## 5 Y Natan's Catering (37.76833824373,-122.389400461508) 9
## 6 N Curry Up Now (37.7910703986756,-122.401145196973) 11
## end duration lat lon has_b has_t has_q
## 1 22 12 37.76520 -122.4165 TRUE TRUE TRUE
## 2 14 1 37.76333 -122.4202 TRUE FALSE FALSE
## 3 11 1 37.74771 -122.3964 TRUE FALSE FALSE
## 4 13 1 37.74508 -122.3923 TRUE FALSE FALSE
## 5 11 2 37.76834 -122.3894 TRUE FALSE FALSE
## 6 14 3 37.79107 -122.4011 TRUE FALSE FALSE
center <- c(mean(burritos$lat, na.rm = TRUE), mean(burritos$lon, na.rm = TRUE))
zoom <- min(MaxZoom(range(burritos$lat, na.rm = TRUE),
range(burritos$lon, na.rm = TRUE)))
map1 <- GetMap(center=center, zoom=zoom, destfile = "san-francisco.png")
PlotOnStaticMap(map1, burritos$lat, burritos$lon, col = "#ed4964", pch=20)

tacos <- data.frame(filter(dat, dat$has_t))
head(tacos)
## DayOfWeekStr starttime endtime PermitLocation
## 1 Friday 10AM 10PM 200 SHOTWELL ST
## 2 Friday 12AM 5AM 1200 MISSISSIPPI ST
## 3 Friday 9AM 10PM 2598 HARRISON ST
## 4 Friday 10AM 11AM 409 ILLINOIS ST
## 5 Friday 11AM 3PM 180 NEW MONTGOMERY ST
## 6 Friday 9PM 12AM 1501 FOLSOM ST
## optionaltext
## 1 Tacos, Burritos, Tortas, Quesadillas, Mexican Drinks, Aguas Frescas
## 2 Cold Truck: sandwiches, corndogs, tacos, yogurt, snacks, candy, hot and cold drinks
## 3 Tacos, Burritos, Tortas, Quesadillas, Mexican Drinks, Aguas Frescas
## 4 Cold Truck: Hot & Cold Sandwiches, Bagels, Burritos, Soups, Hot Dogs, Tacos, Pork Buns, BBQ Meat, Fruit, Various Beverages, Pasties, Pre-Packaged Snacks, Candy, Salads, Muffins, Scones, Brownies, Croissants, Energy Bars, Noodle Bowls
## 5 Tacos, burritos, quesadillas
## 6 Tacos, burritos, soda & juice
## ColdTruck Applicant Location start
## 1 N Santana ESG, Inc. (37.7651967350509,-122.416451692902) 10
## 2 Y M M Catering (37.7508581374316,-122.394102374471) 0
## 3 N Santana ESG, Inc. (37.7558763209725,-122.412271386632) 9
## 4 Y Two G's Catering (37.7667867792956,-122.388078331989) 10
## 5 N Plaza Garibaldy (37.7863630776208,-122.399264358097) 11
## 6 N GOZA GOZA TACO (37.771814022357,-122.413989317366) 21
## end duration lat lon has_b has_t has_q
## 1 22 12 37.76520 -122.4165 TRUE TRUE TRUE
## 2 5 5 37.75086 -122.3941 FALSE TRUE FALSE
## 3 22 13 37.75588 -122.4123 TRUE TRUE TRUE
## 4 11 1 37.76679 -122.3881 TRUE TRUE FALSE
## 5 15 4 37.78636 -122.3993 TRUE TRUE TRUE
## 6 0 -21 37.77181 -122.4140 TRUE TRUE FALSE
center <- c(mean(tacos$lat, na.rm = TRUE), mean(tacos$lon, na.rm = TRUE))
zoom <- min(MaxZoom(range(tacos$lat, na.rm = TRUE),
range(tacos$lon, na.rm = TRUE)))
map1 <- GetMap(center=center, zoom=zoom, destfile = "san-francisco.png")
PlotOnStaticMap(map1, tacos$lat, tacos$lon, col = "#ed4964", pch=20)

quesadillas <- data.frame(filter(dat, dat$has_q))
head(quesadillas)
## DayOfWeekStr starttime endtime PermitLocation
## 1 Friday 10AM 10PM 200 SHOTWELL ST
## 2 Friday 10AM 11AM 1828 EGBERT AVE
## 3 Friday 10AM 11AM 2701 GREEN ST
## 4 Friday 10AM 11AM 3100 PACIFIC AVE
## 5 Friday 12PM 1PM 1150 FRANCISCO ST
## 6 Friday 9AM 10PM 2598 HARRISON ST
## optionaltext
## 1 Tacos, Burritos, Tortas, Quesadillas, Mexican Drinks, Aguas Frescas
## 2 Cold Truck: Cheeseburgers, Burgers, Chicken Bake, Chili Dogs, Hot Dogs, Corn Dogs, Cup of Noodles, Egg Muffins, Tamales, Hot Sandwiches Quesadillas, Gatorade, Juice, Soda, Mikl, Coffee, Hot Cocoa, Hot Tea, Flan, Fruits, Fruit Salad, Yogurt, Candy, Chips, Donuts, Cookies, Granola, Muffins & Various Drinks & Pre-Packaged Snacks.
## 3 Cold Truck: Pre-packaged sandwiches, Chicken Bake, Canned Soup, Chili Dog, Corn Dog, Cup of Noodles, Egg Muffins, Hamburgers, Cheeseburgers, Hot Dog, Hot sandwiches, quesadillas, Beverages, Flan, Fruits, Yogurt, Candy, Cookies, Chips, Donuts, Snacks
## 4 Cold Truck: Pre-packaged sandwiches, Chicken Bake, Canned Soup, Chili Dog, Corn Dog, Cup of Noodles, Egg Muffins, Hamburgers, Cheeseburgers, Hot Dog, Hot sandwiches, quesadillas, Beverages, Flan, Fruits, Yogurt, Candy, Cookies, Chips, Donuts, Snacks
## 5 Cold Truck: Pre-packaged sandwiches, Chicken Bake, Canned Soup, Chili Dog, Corn Dog, Cup of Noodles, Egg Muffins, Hamburgers, Cheeseburgers, Hot Dog, Hot sandwiches, quesadillas, Beverages, Flan, Fruits, Yogurt, Candy, Cookies, Chips, Donuts, Snacks
## 6 Tacos, Burritos, Tortas, Quesadillas, Mexican Drinks, Aguas Frescas
## ColdTruck Applicant Location start
## 1 N Santana ESG, Inc. (37.7651967350509,-122.416451692902) 10
## 2 Y Bach Catering (37.7270392647114,-122.400141029645) 10
## 3 Y D & T Catering (37.7950473983156,-122.443611961361) 10
## 4 Y D & T Catering (37.7919274798426,-122.446351899572) 10
## 5 Y D & T Catering (37.8033613224352,-122.424123509274) 12
## 6 N Santana ESG, Inc. (37.7558763209725,-122.412271386632) 9
## end duration lat lon has_b has_t has_q
## 1 22 12 37.76520 -122.4165 TRUE TRUE TRUE
## 2 11 1 37.72704 -122.4001 FALSE FALSE TRUE
## 3 11 1 37.79505 -122.4436 FALSE FALSE TRUE
## 4 11 1 37.79193 -122.4464 FALSE FALSE TRUE
## 5 13 1 37.80336 -122.4241 FALSE FALSE TRUE
## 6 22 13 37.75588 -122.4123 TRUE TRUE TRUE
center <- c(mean(quesadillas$lat, na.rm = TRUE), mean(quesadillas$lon, na.rm = TRUE))
zoom <- min(MaxZoom(range(quesadillas$lat, na.rm = TRUE),
range(quesadillas$lon, na.rm = TRUE)))
map1 <- GetMap(center=center, zoom=zoom, destfile = "san-francisco.png")
PlotOnStaticMap(map1, quesadillas$lat, quesadillas$lon, col = "#ed4964", pch=20)
